

package com.clyme.expediente.controlador;

import com.clyme.expediente.entidad.Sede;
import com.clyme.expediente.entidad.Ubigeo;
import com.clyme.expediente.servicios.SedeServicios;
import com.clyme.expediente.utilitarios.SetUbigeo;
import com.clyme.expediente.utilitarios.Utilitario;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
@ManagedBean(name = "sedeControlador")
@ViewScoped
public class SedeControlador implements Serializable{
    
    private SetUbigeo mapaUbigeo ;
    private List<SelectItem> departamentos;
    private List<SelectItem> provincias; 
    private List<SelectItem> distritos; 
    private String idDepartamento;
    private String idProvincia;
    private String idDistrito;
    private List<Sede> sedes;
    private Sede sede;
    private Ubigeo ubigeo;
    private SedeServicios sedeServicios;
    
    
    public SedeControlador() {
    }
    
    public void initLista(){
        if (!FacesContext.getCurrentInstance().isPostback()) 
        {
            sedeServicios = new SedeServicios();
            sedes = sedeServicios.buscarTodos();
        }
    }
    
    public void initRegistro()
    {
        if (!FacesContext.getCurrentInstance().isPostback()) 
        {
            sedeServicios = new SedeServicios();
            mapaUbigeo = new SetUbigeo();
            ensamblarUbigeo();
            sede = new Sede();
        }
    }
    
    public void initUpdate()
    {
        if (!FacesContext.getCurrentInstance().isPostback()) 
        {
            Object parametro = Utilitario.getFlash("idSede");
            if (parametro == null) {
                Utilitario.redireccionarJSF(FacesContext.getCurrentInstance(), "/views/sede/list.xhtml");
                return;
            }
            sedeServicios = new SedeServicios();
            sede = sedeServicios.obtenerSede(Integer.valueOf(parametro.toString()));
            mapaUbigeo = new SetUbigeo();
            ensamblarUbigeo();
            idDepartamento = sede.getUbigeo().getCodDepartamento();
            cambiarDepartamentos();
            idProvincia = sede.getUbigeo().getCodProvincia();
            cambiarProvincias();
            idDistrito = sede.getUbigeo().getCodDistrito();
        }
    }
    
    private void ensamblarUbigeo(){
        departamentos = new ArrayList<SelectItem>();
        provincias = new ArrayList<SelectItem>();
        distritos = new ArrayList<SelectItem>();
        List<Ubigeo> ubigeos =  sedeServicios.obtenerUbigeos();
        for(Ubigeo ubige : ubigeos){
            mapaUbigeo.addUbigeo(ubige);
        }
        departamentos = mapaUbigeo.getDepartamentos();
        provincias = mapaUbigeo.getProvincia("0");
        distritos = mapaUbigeo.getDistrito("0","0");

    }
    
    public void cambiarDepartamentos(){ 
        provincias = mapaUbigeo.getProvincia(idDepartamento);
        distritos = mapaUbigeo.getDistrito("0","0");
    }
    
    public void cambiarProvincias(){
        distritos = mapaUbigeo.getDistrito(idDepartamento,idProvincia);
    }
    
    public void prepararEliminar(Integer id)
    {
        sede = sedeServicios.obtenerSede(id);
    }
    
    public void registrarSede()
    {
        if(!esVistaValida())
        {
            return;
        }
        ubigeo = sedeServicios.obtenerUbigeo(idDepartamento, idProvincia, idDistrito);
        sede.setUbigeo(ubigeo);
        sedeServicios.registrarSede(sede);
        sede = new Sede();
    }
    
    public String irActualizar(int id)
    {
        Utilitario.putFlash("idSede", id);
        return "update.xhtml?faces-redirect=true";
    }
    
    public void actualizarSede()
    {
        if(!esVistaValida())
        {
            return;
        }
        ubigeo = sedeServicios.obtenerUbigeo(idDepartamento, idProvincia, idDistrito);
        sede.setUbigeo(ubigeo);
        sedeServicios.actualizarSede(sede);
    }
    
    public void eliminarSede()
    {
        sedeServicios.eliminarSede(sede);
        sedes = sedeServicios.buscarTodos();
    }
    
    private boolean esVistaValida()
    {
        boolean ok = true;
        return ok;
    }
    
    /** GETTER AND SETTERS **/
    
    public List<Sede> getSedes() {
        return sedes;
    }

    public void setSedes(List<Sede> sedes) {
        this.sedes = sedes;
    }

    public Sede getSede() {
        return sede;
    }

    public void setSede(Sede sede) {
        this.sede = sede;
    }

    public List<SelectItem> getDepartamentos() {
        return departamentos;
    }

    public void setDepartamentos(List<SelectItem> departamentos) {
        this.departamentos = departamentos;
    }

    public List<SelectItem> getProvincias() {
        return provincias;
    }

    public void setProvincias(List<SelectItem> provincias) {
        this.provincias = provincias;
    }

    public List<SelectItem> getDistritos() {
        return distritos;
    }

    public void setDistritos(List<SelectItem> distritos) {
        this.distritos = distritos;
    }

    public String getIdDepartamento() {
        return idDepartamento;
    }

    public void setIdDepartamento(String idDepartamento) {
        this.idDepartamento = idDepartamento;
    }

    public String getIdProvincia() {
        return idProvincia;
    }

    public void setIdProvincia(String idProvincia) {
        this.idProvincia = idProvincia;
    }

    public String getIdDistrito() {
        return idDistrito;
    }

    public void setIdDistrito(String idDistrito) {
        this.idDistrito = idDistrito;
    }
    
}
